const { build,context } = require('esbuild')
const path = require('path')
// 解析用户执行命令行的参数
const args = require('minimist')(process.argv.slice(2))
console.log(args)
// 获取用户打包的模块
const target = args._[0] || 'reactivity'

// 获取用户打包的格式
const format = args.f || 'global'
// 读取独立包的package.json
const pkg = require(path.resolve(__dirname, `../packages/${target}/package.json`))
// 判断输出的格式
const outputFormat = format.startsWith('global') ? 'iife' :format == 'cjs' ? 'cjs' : 'esm'
// 定义打包输出的路径 比如reactivity.global.js  reactivtiy.cjs.js reactivity.esm.js
const outfile = path.resolve(__dirname, `../packages/${target}/dist/${target}.${format}.js`)

// 定义esbuild build参数
build({
  // 定义打包的入口
  entryPoints: [path.resolve(__dirname, `../packages/${target}/src/index.ts`)],
  outfile,
  bundle: true,
  sourcemap: true,
  format: outputFormat,
  globalName: pkg.buildOptions?.name,
  platform: format == 'cjs' ? 'node' : 'browser',
  // esbuild 在0.16.0版本之后移除了watch,在之后版本使用context 来实现
  // watch: {
  //   // 监控文件变化
  //   onRebuild(error){
  //     if(!error) console.log(`${target} build success!`)
  //   }
  // }
}).then(() => {
  console.log(`${target} watching....!`)
});
